package com.nnnu.orange.controller.admin;


import com.nnnu.orange.constant.MessageConstants;
import com.nnnu.orange.pojo.dto.UserDto;
import com.nnnu.orange.pojo.dto.UserQueryDto;
import com.nnnu.orange.result.Result;
import com.nnnu.orange.service.IUsersService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <p>
 * 存储用户的详细信息 前端控制器
 * </p>
 *
 * @author zk
 * @since 2024-11-07
 */
@RestController("adminUsersController")
@RequestMapping("/admin/user")
@Slf4j
@RequiredArgsConstructor
@Api(tags = "管理端用户相关接口")
public class UsersController {

    private final IUsersService usersService;


    /**
     * 分页查询所有用户列表
     *
     * @param queryDto dto
     * @return 分页后的列表
     */
    @GetMapping("/list")
    @ApiOperation("分页后的用户列表")
    public Result<?> list(@Validated UserQueryDto queryDto) {
        log.info("管理员获取分页用户列表:{}", queryDto);
        return Result.success(usersService.pageList(queryDto), MessageConstants.SELECT_OK);
    }


    /**
     * 为用户重置密码
     *
     * @param userId 用户id
     * @return 提示
     */
    @PutMapping("/{userId}")
    @ApiOperation("为用户重置密码")
    public Result<?> resetPa(@PathVariable Integer userId) {
        log.info("管理员为用户重置密码:{}", userId);
        usersService.resetUserPassword(userId);
        return Result.success(MessageConstants.OPERATION_SUCCESSFUL);
    }


    /**
     * 为用户修改信息
     *
     * @param userDto dto
     * @return 提示
     */
    @PutMapping("/update")
    @ApiOperation("为用户修改信息")
    public Result<?> updateUser(@RequestBody @Validated UserDto userDto) {
        log.info("管理员为用户修改信息：{}", userDto);
        usersService.updateUserInfo(userDto);
        return Result.success(MessageConstants.OPERATION_SUCCESSFUL);
    }

    /**
     * 新增用户
     *
     * @param userDto dto
     * @return 提示
     */
    @PostMapping("/save")
    @ApiOperation("新增用户")
    public Result<?> save(@RequestBody @Validated UserDto userDto) {
        log.info("管理员新增用户:{}", userDto);
        usersService.saveUser(userDto);
        return Result.success(MessageConstants.OPERATION_SUCCESSFUL);
    }


    /**
     * 批量删除用户
     *
     * @param ids 用户id列表
     * @return 提示
     */
    @DeleteMapping("/delete")
    @ApiOperation("批量删除用户")
    public Result<?> batchDeleteUser(@RequestParam List<Integer> ids) {
        log.info("管理员批量删除用户:{}", ids);
        usersService.batchDeleteUser(ids);
        return Result.success(MessageConstants.OPERATION_SUCCESSFUL);
    }

    /**
     * 获取用户详细信息
     *
     * @param userId 用户id
     * @return 用户实体
     */
    @GetMapping("/{userId}")
    @ApiOperation("获取用户详细信息")
    public Result<?> getDetail(@PathVariable Integer userId) {
        log.info("管理员获取用户详细信息：{}", userId);
        return Result.success(usersService.getById(userId), MessageConstants.SELECT_OK);
    }

}
